package pe.com.pamer.siscal.programacion.dao;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import pe.com.pamer.siscal.bean.Examen;

@Repository(value="examenMapper")
public interface ExamenMapper {

	final  String  SELECT_ALL_EXAMEN = " SELECT * FROM examen ";
	final  String  FIND_BY_ID = " SELECT * FROM examen e WHERE e.id_examen = #{id} ";
	final  String  INSERT_EXAMEN = " INSERT INTO examen(id_periodo , id_grado , fe_examen , de_examen , st_carga_plantilla , st_carga_archivos , st_calificacion , pu_nivel_alto , pu_nivel_bajo) "
			       + " VALUES(#{periodo.id} , #{grado.id} , #{fechaExamen} , #{descripcion} , #{stCargaPlantilla} , #{stCargaArchivo} , #{stCalificacion} , #{puntajeAlto} , #{puntajeBajo})" ;

    @Select(SELECT_ALL_EXAMEN)
	@Results(value={
			@Result(property="id" , column="id_examen"),
			@Result(property="descripcion" , column="de_examen"),
			@Result(property="fechaExamen" , column="fe_examen"),
			@Result(property="stCargaPlantilla" , column="st_carga_plantilla"),
			@Result(property="stCalificacion" , column="st_calificacion"),
			@Result(property="stCargaArchivo" , column="st_carga_archivos"),
			@Result(property="puntajeAlto" , column="pu_nivel_alto"),
			@Result(property="puntajeBajo" , column="pu_nivel_bajo")
	})
     List<Examen>   obtenerExamenes();

   @Select(FIND_BY_ID)
	@Results(value={
			@Result(property="id" , column="id_examen"),
			@Result(property="descripcion" , column="de_examen"),
			@Result(property="fechaExamen" , column="fe_examen"),
			@Result(property="stCargaPlantilla" , column="st_carga_plantilla"),
			@Result(property="stCalificacion" , column="st_calificacion"),
			@Result(property="stCargaArchivo" , column="st_carga_archivos"),
			@Result(property="puntajeAlto" , column="pu_nivel_alto"),
			@Result(property="puntajeBajo" , column="pu_nivel_bajo")
	})
    Examen  obtenerExamen(@Param("id") int id);

     @Insert(INSERT_EXAMEN)
     @Options(useGeneratedKeys = true, keyProperty = "id")
     void  grabarExamen(Examen examen);

     List<Examen>  selectExamenAll();
}
